<template>
  <div class="row">
    <!-- 展示用户列表，没有内容时隐藏它。user.login，是唯一标识 -->
    <div
      v-show="info.users.length"
      class="card"
      v-for="user in info.users"
      :key="user.login"
    >
      <!-- 动态绑定用户的主页地址和图片地址 -->
      <a :href="user.html_url" target="_blank">
        <!-- v-lazy 实现图片的懒加载 -->
        <img v-lazy="user.avatar_url" style="width: 100px; height: 100px" />
      </a>
      <p class="card-text">{{ user.login }}</p>
    </div>
    <h2 class="welcome" v-show="info.isFirst">前端杂货铺，欢迎你的使用！</h2>
    <h2 class="loading" v-show="info.isLoading">加载中...</h2>
    <h2 class="error" v-show="info.errMsg">{{ info.errMsg }}</h2>
  </div>
</template>

<script>
// import this.$bus from "../this.$bus";
export default {
  name: "myList",
  data() {
    return {
      info: {
        isFirst: true, // 欢迎词
        isLoading: false, // 加载中...
        errMsg: "", // 错误信息
        users: [], // 存放用户的数组
      },
    };
  },
  // 挂载时绑定自定义事件
  mounted() {
    this.$bus.$on("updateListData", (dataObj) => {
      // 合并这两个对象，并且同 key 值的后面的会覆盖前面的，这样 isFirst 就不用重复写了
      this.info = { ...this.info, ...dataObj };
    });
  },
  // 销毁前解绑自定义事件
  beforeDestroy() {
    this.$bus.$off("updateListData");
  },
};
</script>

<style scoped>
.welcome {
  color: orange;
}
.loading {
  color: rgb(0, 162, 255);
}
.error {
  color: red;
}
.album {
  min-height: 50rem;
  padding-top: 3rem;
  padding-bottom: 3rem;
  background-color: #f7f7f7;
}

.card {
  float: left;
  width: 33.333%;
  padding: 0.75rem;
  margin-bottom: 2rem;
  border: 1px solid #efefef;
  text-align: center;
}

.card > img {
  margin-bottom: 0.75rem;
  border-radius: 100px;
}

.card-text {
  font-size: 85%;
}
</style>
